package org.patterns.creational.singleton;

import java.util.ArrayList;
import java.util.List;
import java.util.Random;

/**
 * LoadBalancer类用于实现一个简单的负载均衡器
 * 它主要负责管理一个服务器列表，并提供一种机制来选择下一个要服务的服务器
 * 本类使用 IoDH 模式确保在系统中只有一个实例，以确保对服务器列表的统一管理
 */
public class LoadBalancer {
    //服务器集合
    private List<String> serverList = null;

    //私有构造函数，防止外部实例化
    private LoadBalancer() {
        serverList = new ArrayList<String>();
    }

    //使用HolderClass模式实现Singleton，确保在类加载时不会立即实例化，延迟加载
    private static class HolderClass{
        private final static LoadBalancer instance = new LoadBalancer();
    }

    /**
     * 获取LoadBalancer的唯一实例
     *
     * @return LoadBalancer的实例
     */
    public static LoadBalancer getLoadBalancer() {
        return HolderClass.instance;
    }


    /**
     * 向服务器列表中添加服务器
     *
     * @param server 要添加的服务器地址或名称
     */
    public void addServer(String server) {
        serverList.add(server);
    }

    /**
     * 从服务器列表中移除服务器
     *
     * @param server 要移除的服务器地址或名称
     */
    public void removeServer(String server) {
        serverList.remove(server);
    }

    /**
     * 随机选择一个服务器
     * 使用Java的Random类来生成一个随机数，以此来选择服务器列表中的一个服务器
     *
     * @return 随机选中的服务器名称
     */
    public String getServer() {
        Random random = new Random();
        int i = random.nextInt(serverList.size());
        return serverList.get(i);
    }
}

